#ifndef	_PALETTE_H
#define _PALETTE_H
 
#include "stm32f10x.h"
#include "bsp_ili9341_lcd.h"  //为毛要这样
 
 
#define		COLOR_BLOCK_WIDTH	40
#define		COLOR_BLOCK_HEIGHT	28

#define		BUTTON_NUM			16	
#define		PALETTE_START_Y		1
#define		PALETTE_END_Y		LCD_Y_LENGTH

//这个东西是干嘛的???
#if 1		//按钮栏在左边
	#define		BUTTON_START_X		1
	#define		PALETTE_START_X		(COLOR_BLOCK_WIDTH*2+1)
	#define		PALETTE_END_X		LCD_X_LENGTH
#else		//按钮栏在右边，(存在触摸按键时也会的bug仅用于测试触摸屏左边界)
	#define		BUTTON_START_X		(LCD_X_LENGTH-2*COLOR_BLOCK_WIDTH)
	#define		PALETTE_START_X		1
	#define		PALETTE_END_X		(LCD_X_LENGTH-2*COLOR_BLOCK_WIDTH)
#endif

/*
 	LCD颜色代码，CL_是Color的简写
	16Bit由高位至低位，RRRR RGGG GGGB BBBB	565
	
	下面的的RGB宏将24位的RGB值转换为16位格式
	启动windows的画笔程序，点击编辑颜色，选择自定义颜色，可以获得的RGB值
	
	推荐使用迷你取色器软件获得你看到的界面颜色
 */
#if LCD_RGB_888
/*RGB888颜色转换  将8位的R,G,B转换为24位的RGB888格式*/
#define RGB(R,G,B)		((R<<16) | (G<<8) |(B))		

#else
/*RGB565颜色(都是从高位来取的)转换  将8位的R,G,B转换为16位的RGB565格式*/
#define	RGB(R,G,B)		(((R>>3)<<11) | ((G>>2)<<5) | (B>>3))
#define RGB565_R(x)		((x>>8) & 0xF8)	//1111 1000	只留了高位
#define RGB565_G(x)		((x>>3) & 0xFC) //1111 1100 
#define RGB565_B(x)		((x<<3) & 0xF8)

#endif

enum		/*这里为什么不用typedef*/
{	/*这里是RGB(8,8,8)转RGB(5,6,5)*/
	CL_WHITE= RGB(255,255,255),	/*白色*/
	CL_BLACK= RGB(0,  0  ,  0),	/*黑色*/
	CL_RED	= RGB(255,0  ,  0),	/*红色*/
	CL_GREEN= RGB(0  ,255,  0),	/*绿色*/
	CL_BLUE	= RGB(0  ,  0,255),	/*蓝色*/
	CL_YELLOW=RGB(255,255,  0), /*黄色*/
	
	CL_GREY	 =RGB( 98, 98, 98), /*深灰色*/
	CL_GREY1 =RGB(150,150,150), /*浅灰色*/
	CL_GREY2 =RGB(180,180,180), /*浅灰色*/
	CL_GREY3 =RGB(200,200,200), /*最浅灰色*/	
	CL_GREY4 =RGB(230,230,230), /*最浅灰色*/
	
	CL_BUTTON_GREY=RGB(195,195,195), /*WINDOWS按钮表面灰色*/
	CL_MAGENTA	  =RGB(255,  0,255), /*紫红色,洋红色*/
	CL_CYAN		  =RGB(0  ,255,255), /*蓝绿色,青色*/
	
	CL_BLUE1	  =RGB(0  ,0  ,240), /*深蓝色*/
	CL_BLUE2	  =RGB(0  ,0  ,128), /*深蓝色*/	
	CL_BLUE3	  =RGB(68 ,68 ,255), /*浅蓝色1*/
	CL_BLUE4	  =RGB(0  ,64 ,128), /*深蓝色1*/
	
	/*UI界面Windows控件常用色*/
	CL_BTN_FACE	  =RGB(236,233,216), /*按钮表面颜色(灰)*/
	CL_BOX_BORDER1=RGB(172,168,153), /*分组框主线颜色*/
	CL_BOX_BORDER2=RGB(255,255,255), /*分组框阴影线颜色*/
	/*0111 1111 1111 1111*/
	CL_MASK		  =0x7FFF			 /*RGB565颜色掩码，用于文字背景透明*/
};

typedef struct	//后面还可以再接一些东西
{	//注意这里面是分号
	uint16_t	start_x;		//按键的x起始坐标
	uint16_t	start_y;		//按键的y起始坐标
	uint16_t	end_x;			//按键的x结束坐标
	uint16_t	end_y;			//按键的y结束坐标
	uint32_t	para;			//颜色按钮中表示选择的颜色，笔迹形状按钮中表示选择的画刷
	uint8_t		touch_flag;		//按键按下的标志
	
	void (*draw_btn)(void *);	//按键描绘按钮(这样写可以吗?)
	void (*btn_command)(void *);//按键功能执行函数，例如切换颜色，画刷	
}Touch_Button;

/*画刷形状列表*/
typedef	enum
{
	LINE_SINGLE_PIXCEL=0,		//单像素线
	LINE_2_PIXCEL,				//2像素线
	LINE_4_PIXCEL,				//4像素线
	LINE_6_PIXCEL,				//6像素线
	LINE_8_PIXCEL,				//8像素线
	LINE_16_PIXCEL,				//16像素线
	LINE_20_PIXCEL,				//20像素线
	LINE_WITH_CIRCLE,			//珠子连线
	RUBBER,						//橡皮
}SHAPE;

/*画刷参数*/
typedef struct 
{
	uint32_t color;
	SHAPE shape;
}Brush_Style;	/*颜色  形状*/

/*brush全局变量在其它文件有使用到*/
extern Brush_Style brush;

void	Draw_Trail(int16_t pre_x,int16_t pre_y,int16_t x,int16_t y,Brush_Style * brush);
void Touch_Button_Up(int16_t x,int16_t y);
void Touch_Button_Down(int16_t x,int16_t y);
void	Palette_Init(uint8_t LCD_Mode);

#endif

/**/

